510C - Fox And Names - CodeForces Solution


dfs and similar graphs sortings *1600

Please click on ads to support us..

C++ Code:

#include <iostream>
#include <vector>
const int NMAX=28;

using namespace std;

int f[NMAX], t[NMAX];
vector <int> v[NMAX], ans;
char s[105][105];
int n;
bool gasit;

void dfs(int);

int main()
{
  int i, j;
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin>>n;
  for(i=0; i<=26; i++) f[i]=t[i]=0;
  cin>>s[1];
  for(i=2; i<=n; i++)
  {
    cin>>s[i];
    gasit=false;
    for(j=0; s[i][j]&&s[i-1][j]; j++)
    {
      if(s[i][j]!=s[i-1][j])
      {
        gasit=true;
        v[int(s[i-1][j]-'a')].push_back(int(s[i][j]-'a'));
        f[int(s[i][j]-'a')]=++t[int(s[i][j]-'a')];
        break;
      }
    }
    if(gasit==false && s[i-1][j]!=0)
    {
      cout<<"Impossible"<<'\n';
      return 0;
    }
  }
  for(i=0; i<26; i++)
  {
    if(f[i]==0) dfs(i);
  }
  if(ans.size()!=26) cout<<"Impossible"<<'\n';
  else
  {
    for(auto i:ans) cout<<char(i+'a');
    cout<<'\n';
  }
  return 0;
}

void dfs(int nod)
{
  if(t[nod]==0) ans.push_back(nod);
  for(auto i:v[nod])
  {
    t[i]--;
    if(t[i]==0) dfs(i);
  }
}


Comments

Submit
0 Comments
More Questions

550A - Two Substrings
797B - Odd sum
1093A - Dice Rolling
1360B - Honest Coach
1399C - Boats Competition
1609C - Complex Market Analysis
1657E - Star MST
1143B - Nirvana
1285A - Mezo Playing Zoma
919B - Perfect Number
894A - QAQ
1551A - Polycarp and Coins
313A - Ilya and Bank Account
1469A - Regular Bracket Sequence
919C - Seat Arrangements
1634A - Reverse and Concatenate
1619C - Wrong Addition
1437A - Marketing Scheme
1473B - String LCM
1374A - Required Remainder
1265E - Beautiful Mirrors
1296A - Array with Odd Sum
1385A - Three Pairwise Maximums
911A - Nearest Minimums
102B - Sum of Digits
707A - Brain's Photos
1331B - Limericks
305B - Continued Fractions
1165B - Polycarp Training
1646C - Factorials and Powers of Two